package light.mvc.service.workflow.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import light.mvc.dao.BaseDaoI;
import light.mvc.model.workflow.Tfield;
import light.mvc.model.workflow.TformTemplate;
import light.mvc.pageModel.base.PageFilter;
import light.mvc.pageModel.workflow.FormTemplate;
import light.mvc.service.workflow.FormTemplateServiceI;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class FormTemplateServiceImpl implements FormTemplateServiceI {

	@Autowired
	private BaseDaoI<TformTemplate> formTemplateDao;

	@Override
	public List<FormTemplate> findAll() {
		List<FormTemplate> ul = new ArrayList<FormTemplate>();
		String hql = "from TformTemplate";
		List<TformTemplate> l = formTemplateDao.find(hql);
		for (TformTemplate tformTemplate : l) {
			FormTemplate formTemplate = new FormTemplate();
			BeanUtils.copyProperties(tformTemplate, formTemplate);
			ul.add(formTemplate);
		}
		return ul;
	}

	@Override
	public List<FormTemplate> dataGrid(FormTemplate formTemplate, PageFilter ph) {
		List<FormTemplate> ul = new ArrayList<FormTemplate>();
		Map<String, Object> params = new HashMap<String, Object>();
		String hql = " from TformTemplate t ";
		List<TformTemplate> l = formTemplateDao.find(hql + orderHql(ph), params, ph.getPage(), ph.getRows());
		for (TformTemplate t : l) {
			FormTemplate u = new FormTemplate();
			BeanUtils.copyProperties(t, u);
			ul.add(u);
		}
		return ul;
	}

	private String orderHql(PageFilter ph) {
		String orderString = "";
		if ((ph.getSort() != null) && (ph.getOrder() != null)) {
			orderString = " order by t." + ph.getSort() + " " + ph.getOrder();
		}
		return orderString;
	}

	@Override
	public Long count(FormTemplate formTemplate, PageFilter ph) {
		Map<String, Object> params = new HashMap<String, Object>();
		String hql = " from TformTemplate t ";
		return this.formTemplateDao.count("select count(*) " + hql, params);
	}

	@Override
	public void delete(Long id) {
		// 1，删除数据库记录
		TformTemplate formTemplate = formTemplateDao.get(TformTemplate.class, id);
		formTemplateDao.delete(formTemplate);
	}

	@Override
	public void save(FormTemplate formTemplate) {
		TformTemplate t = new TformTemplate();
		Iterator<Tfield> itr = formTemplate.getFields().iterator();
		while(itr.hasNext()){
			itr.next().setFormTemplate(t);
		}
		BeanUtils.copyProperties(formTemplate, t);
		formTemplateDao.save(t);
	}

	@Override
	public FormTemplate getById(Long id) {
		FormTemplate f = new FormTemplate();
		TformTemplate tf = formTemplateDao.get(TformTemplate.class, id);
		BeanUtils.copyProperties(tf, f);
		return f;
	}

	@Override
	public TformTemplate getTformTemplateById(Long id) {
		TformTemplate tf = formTemplateDao.get(TformTemplate.class, id);
		return tf;
	}

	@Override
	public void update(TformTemplate tformTemplate) {
		formTemplateDao.update(tformTemplate);
	}
}
